{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 增益法\n",
    "编写Python代码，对涉及到13个特征，使用随机森林的方法进行重要性评价"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 1) Proline                        0.172933\n",
      " 2) Color intensity                0.159572\n",
      " 3) Flavanoids                     0.158639\n",
      " 4) Alcohol                        0.122553\n",
      " 5) OD280/OD315 of diluted wines   0.117285\n",
      " 6) Hue                            0.082196\n",
      " 7) Total phenols                  0.052964\n",
      " 8) Magnesium                      0.030679\n",
      " 9) Malic acid                     0.030567\n",
      "10) Alcalinity of ash              0.026736\n",
      "11) Proanthocyanins                0.021301\n",
      "12) Ash                            0.013659\n",
      "13) Nonflavanoid phenols           0.010917\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data', header = None)\n",
    "df.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash', \n",
    "              'Alcalinity of ash', 'Magnesium', 'Total phenols', \n",
    "              'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', \n",
    "              'Color intensity', 'Hue', 'OD280/OD315 of diluted wines', 'Proline']\n",
    "X, y = df.drop(columns='Class label'),df['Class label']\n",
    "forest = RandomForestClassifier(n_estimators=10000, random_state=0)\n",
    "forest.fit(X, y)\n",
    "importances = forest.feature_importances_\n",
    "indices = np.argsort(importances)[::-1]\n",
    "for e in range(X.shape[1]):\n",
    "    print(\"%2d) %-*s %f\" % (e + 1, 30, X.columns[indices[e]], importances[indices[e]]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可将特征重要性得分通过条形图进行展现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import matplotlib\n",
    "matplotlib.rcParams['font.family'] = 'Arial Unicode MS'\n",
    "plt.title('Feature Importance')\n",
    "plt.bar(range(X.shape[1]), importances[indices], color='black', align='center')\n",
    "plt.xticks(range(X.shape[1]), X.columns[indices], rotation=90)\n",
    "plt.xlim([-1, X.shape[1]])\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 置换法\n",
    "现基于wine.data数据集，通过编写Python代码，说明置换法的原理和使用方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 1) Color intensity                0.024976\n",
      " 2) Flavanoids                     0.021737\n",
      " 3) Proline                        0.014465\n",
      " 4) OD280/OD315 of diluted wines   0.009800\n",
      " 5) Ash                            0.009589\n",
      " 6) Alcohol                        0.009480\n",
      " 7) Hue                            0.009200\n",
      " 8) Total phenols                  0.009128\n",
      " 9) Malic acid                     0.008869\n",
      "10) Nonflavanoid phenols           0.008781\n",
      "11) Alcalinity of ash              0.008774\n",
      "12) Magnesium                      0.008598\n",
      "13) Proanthocyanins                0.008398\n"
     ]
    }
   ],
   "source": [
    "from sklearn import tree\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.model_selection import train_test_split\n",
    "import numpy as np\n",
    "import random\n",
    "\n",
    "def eval_func(xtrain,ytrain,ytest,xtest):\n",
    "    clf = tree.DecisionTreeClassifier()\n",
    "    clf = clf.fit(xtrain, ytrain)\n",
    "    C2= confusion_matrix(ytest, clf.predict(xtest))\n",
    "    return np.sum(np.diag(C2))/xtest.shape[0]\n",
    "\n",
    "out = []\n",
    "for i in range(10000):\n",
    "    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=i)\n",
    "    org_ratio = eval_func(X_train,y_train,y_test,X_test)\n",
    "    eval_list = []\n",
    "    for col in X_train.columns:\n",
    "        new_train = X_train.copy()\n",
    "        new_train[col] = random.choice(range(new_train.shape[0]))\n",
    "        decrease = org_ratio - eval_func(new_train,y_train,y_test,X_test)\n",
    "        eval_list.append(decrease if decrease > 0 else 0)\n",
    "    out.append(eval_list)\n",
    "\n",
    "importances = pd.DataFrame(np.array(out)).apply(lambda x:np.mean(x),axis=0).values\n",
    "indices = np.argsort(importances)[::-1]\n",
    "for e in range(X.shape[1]):\n",
    "    print(\"%2d) %-*s %f\" % (e + 1, 30, X_train.columns[indices[e]], importances[indices[e]]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将特征重要性得分通过条形图进行展现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.title('Feature Importance')\n",
    "plt.bar(range(X_train.shape[1]), importances[indices], color='black', align='center')\n",
    "plt.xticks(range(X_train.shape[1]), X_train.columns[indices], rotation=90)\n",
    "plt.xlim([-1, X_train.shape[1]])\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
